from faker import Faker
import pymysql
import traceback
"""
经常会用到的一些方法，写道里面，比如说造测试数据，链接数据库等等
可不可以手动加一些日志？
"""
def get_info( i):
    faker = Faker(locale='zh_cn')
    if i == '名字':
        return faker.name()
    elif i == '地址':
        return faker.address()
    elif i == '身份证号':
        return faker.ssn(min_age=18, max_age=95)
class DB:
    def __init__(self, user, password, database, host):
        self.host = host
        self.user = user
        self.password = password
        self.database = database
    def connect(self):
        # 创建数据库对象
        self.db = pymysql.connect(host=self.host, user=self.user, password=self.password,
                                  database=self.database, cursorclass=pymysql.cursors.DictCursor)
        # 创建游标
        self.cursor = self.db.cursor()

    def close(self):
        # 先关闭游标
        self.cursor.close()
        # 再关闭数据库
        self.db.close()

    def SearchOne(self, sql):
        """
        查询符合条件一条数据
        :param sql:
        :return:
        """
        result = None
        self.connect()  # 先去连接数据库
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
            return result
        except:
            traceback.print_exc()  # 错误的信息打印再控制台
            self.db.rollback()  # 发生异常数据库回滚
            return result
        finally:
            self.close()

    def SearchAll(self, sql):
        """
        查询符合条件的多条数据
        :param sql:
        :return:
        """
        result = None
        self.connect()  # 先去连接数据库
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            return result
        except:
            traceback.print_exc()  # 错误的信息打印再控制台
            self.db.rollback()  # 发生异常数据库回滚
            return result
        finally:
            self.close()

    def __edit(self, sql):  # 主程序，增、删、改都是调用同一个方法
        """
        所有涉及到对表的改动，我们都需要提交数据库对象
        :param sql:
        :return:
        """
        self.connect()
        try:
            self.cursor.execute(sql)  # 先去执行sql
            self.db.commit()  # 再去把本次改动提交到数据库
            return 1
        except:
            self.db.rollback()
            traceback.print_exc()  # 打印错误信息
            return 0
        finally:
            self.close()

    def insert(self, sql):
        return self.__edit(sql)

    def delete(self, sql):
        return self.__edit(sql)

    def update(self, sql):
        return self.__edit(sql)








